# 股票交易分析系统 - Docker配置文件
# 显式指定阿里云镜像源以绕过官方源网络问题
FROM registry.cn-hangzhou.aliyuncs.com/kinggushenjie/python:3.11-slim


# 设置工作目录
WORKDIR /app

# 设置环境变量
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV TZ=Asia/Shanghai

# 安装系统依赖（用于pyodbc连接SQL Server）
# 确保apt-get操作在同一RUN指令中，以减少镜像层数并保持缓存清洁
RUN apt-get update && apt-get install -y --no-install-recommends \
    curl \
    gcc \
    g++ \
    freetds-dev \
    freetds-bin \
    unixodbc \
    unixodbc-dev \
    && rm -rf /var/lib/apt/lists/*

# 复制依赖文件并安装（先以root用户安装依赖）
COPY requirements.txt .
RUN pip install --no-cache-dir --upgrade pip && \
    pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

# 复制项目代码
COPY . .

# 为应用创建一个非root用户，增强安全性
RUN useradd -m -u 1000 -s /bin/bash appuser && \
    chown -R appuser:appuser /app

# 切换到非root用户
USER appuser

# 暴露端口
EXPOSE 8000

# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
  CMD curl -f http://localhost:8000/api/health || exit 1

# 启动命令 - 使用Gunicorn作为生产服务器
# Gunicorn管理uvicorn worker，这是FastAPI在生产环境中的推荐部署方式
# --workers: 推荐值为 2 * CPU核心数 + 1
# --worker-class: 指定使用uvicorn的worker
# --bind: 监听所有网络接口的8000端口
CMD ["gunicorn", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "-b", "0.0.0.0:8000", "web_app:app"]
